package com.wuzao.dataStructure.treeSetTest;

import java.util.*;

/**
 * 代码说明
 * 获取 higherKey：
 * <p>
 * 使用 treeSet.higher() 方法获取大于某个值的最小元素。
 * <p>
 * 返回的结果是一个 Map<Character, Integer>。
 * <p>
 * 提取 value：
 * <p>
 * 使用 higherKey.keySet().iterator().next() 获取 Map 的键（Character）。
 * <p>
 * 使用 higherKey.get(key) 获取对应的值（Integer）。
 * <p>
 * 空值检查：
 * <p>
 * 如果 higherKey 为 null（即没有满足条件的元素），需要处理空值情况。
 * <p>
 * 注意事项
 * Map 的键值对：
 * <p>
 * 这里的 Map 只有一个键值对，因此可以直接通过 keySet().iterator().next() 获取键。
 * <p>
 * 如果 Map 有多个键值对，需要根据具体需求处理。
 * <p>
 * higherKey 为 null：
 * <p>
 * 如果 TreeSet 中没有满足条件的元素，higherKey 会返回 null，因此在访问 value 之前需要检查 higherKey 是否为 null。
 * <p>
 * 性能：
 * <p>
 * 获取 value 的操作是常数时间复杂度（O(1)），性能非常高。
 */
public class TreeSetItemObjTest {
    public static void main(String[] args) {
        // 创建自定义的 Comparator
        Comparator<Map<Character, Integer>> comparator = (map1, map2) -> {
            Character char1 = map1.keySet().iterator().next();
            Character char2 = map2.keySet().iterator().next();
            int charCompare = char1.compareTo(char2);
            if (charCompare != 0) {
                return charCompare;
            }
            Integer value1 = map1.get(char1);
            Integer value2 = map2.get(char2);
            return value2.compareTo(value1); // 降序排列
        };

        // 创建 TreeSet，并传入自定义的 Comparator
        TreeSet<Map<Character, Integer>> treeSet = new TreeSet<>(comparator);

        // 添加元素到 TreeSet
        treeSet.add(Collections.singletonMap('A', 10));
        treeSet.add(Collections.singletonMap('B', 5));
        treeSet.add(Collections.singletonMap('C', 20));
        treeSet.add(Collections.singletonMap('A', 15));
        treeSet.add(Collections.singletonMap('B', 8));
        treeSet.add(Collections.singletonMap('D', 12));

        // 输出 TreeSet
        System.out.println("TreeSet elements:");
        for (Map<Character, Integer> map : treeSet) {
            System.out.println(map);
        }

        // 模糊匹配：获取第一个 Character 大于 'B' 的元素
        Map<Character, Integer> higherKey = treeSet.higher(Collections.singletonMap('B', Integer.MAX_VALUE));
        System.out.println("\nFirst element with Character greater than 'B': " + higherKey);

        // 获取 higherKey 的 value
        if (higherKey != null) {
            Character key = higherKey.keySet().iterator().next(); // 获取 Map 的键
            Integer value = higherKey.get(key); // 获取 Map 的值
            System.out.println("Value of higherKey: " + value);
        } else {
            System.out.println("No element found with Character greater than 'B'.");
        }
// 获取所有 Character 大于 'B' 的元素
        Map<Character, Integer> fromKey = Collections.singletonMap('B', Integer.MAX_VALUE);
        SortedSet<Map<Character, Integer>> tailSet = treeSet.tailSet(fromKey);

        System.out.println("\nValues of elements with Character greater than 'B':");
        for (Map<Character, Integer> map : tailSet) {
            Character key = map.keySet().iterator().next();
            if (key > 'B') { // 过滤掉 Character 等于 'B' 的元素
                Integer value = map.get(key);
                System.out.println(value);
            }
        }

    }

}
